#! /usr/bin/python3
'''
测试用例稳定性小工具。

循环跑全量用例，以发现测试用例可能出现的低概率问题，增强用例的稳定性。
日志完整保存在 log 目录，以 'TestCase_20230526_230949' 格式保存。

使用方法：
    TIMES: 设置用例循环次数。
    CMD: 设置执行预测试脚本命令。
    
执行：
    python path/to/stable.py
    
异常：
    极小概率情况会出现保存日志失败情况。
    失败的那次日志名保存为一个空文件。
'''

import os
import time
import datetime
import argparse


def get_time():
    return datetime.datetime.now().strftime('%Y%m%d_%H%M%S')


def get_log_newname():
    return LOG_APTH + '_' + get_time()


def parse_args():
    parser = argparse.ArgumentParser(prog='Stable')
    parser.add_argument('--times', '-t', default=20, type=int, help='repeate times.')
    # parser.add_argument('--path', '-p', default='', help='test case path.')

    args = parser.parse_args()
    return args

if __name__ == '__main__':
    cwd = os.path.abspath(os.path.dirname(__file__))
    tester_path = os.path.join(cwd, '..\\pic_diff_checker.py')
    testcase_path = os.path.join(cwd, '..\\..\\TestCase')
    LOG_APTH = os.path.join(cwd, '..\\..\\log\\TestCase')
    
    args = parse_args()
    TIMES = args.times
    
    CMD = [
        "python",
        tester_path,
        "-c",
        testcase_path,
        '--reset-time',
        '40',
        '--gen-std-pic',
        '--retry',
        '1'
    ]
    cmd_str = ' '.join(CMD)
    # print(cwd)
    # print(cmd_str)
    # exit()
    
    for i in range(TIMES):
        os.popen(cmd_str).close()
        time.sleep(20)
        
        new_name = get_log_newname()
        if os.path.exists(LOG_APTH):
            if os.access(LOG_APTH, os.W_OK):
                print("You have permission to write to this directory.")
                os.replace(LOG_APTH, new_name)
            else:
                print("You do not have permission to write to this directory.")
                open(new_name, 'w').close()
        else:
            print(f'{LOG_APTH} is not exist.')

    